package cn.i7baozh.boot.learn.configuration;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * @author zhangbaoqi532
 * @date 2025/1/8
 */
@Slf4j
@Component
//自定义bean的方式要加入这个注解 不然报错注入失败
@EnableConfigurationProperties(MyConfigurationProperties.class)
public class MyConfigurationTest implements ApplicationRunner {

    /**
     * 此值正常为application.yml文件配置的 xxxValue
     * 如果启动参数中添加了 --test.name=abddd 那么此值为 abddd，
     *  如果主启动类中设置了application.setAddCommandLineProperties(false); 则此值仍然为xxxValue
     *  因为setAddCommandLineProperties为false后，命令行属性就无法添加到environment中，就不能通过@value方式获取，不过可以通过ApplicationRunner获取到
     *
     */
    @Value("${test.name:}")
    private String configValue;

    @Autowired
    private MyConfigurationProperties myConfigurationProperties;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        log.info("@value方式获取到的配置值为 {}", configValue);
        log.info("ApplicationRunner方式获取到的配置值为 {}", args.getOptionValues("test.name"));

        log.info("自定义bean方式获取到的配置 {}", myConfigurationProperties);
    }
}
